package mx.itesm.goyostacoadventure;

import android.util.Log;

import org.andengine.engine.camera.Camera;
import org.andengine.engine.camera.hud.controls.AnalogOnScreenControl;
import org.andengine.engine.camera.hud.controls.BaseOnScreenControl;
import org.andengine.entity.IEntity;
import org.andengine.entity.modifier.MoveModifier;
import org.andengine.entity.modifier.MoveYModifier;
import org.andengine.entity.primitive.Rectangle;
import org.andengine.entity.scene.Scene;
import org.andengine.entity.scene.background.SpriteBackground;
import org.andengine.entity.sprite.AnimatedSprite;
import org.andengine.entity.sprite.Sprite;
import org.andengine.entity.text.Text;
import org.andengine.input.touch.TouchEvent;
import org.andengine.opengl.font.Font;
import org.andengine.opengl.font.FontFactory;
import org.andengine.opengl.font.IFont;
import org.andengine.opengl.texture.ITexture;
import org.andengine.opengl.texture.atlas.bitmap.BitmapTextureAtlas;
import org.andengine.opengl.texture.region.ITextureRegion;
import org.andengine.opengl.texture.region.TiledTextureRegion;
import org.andengine.opengl.util.GLState;
import org.andengine.util.adt.color.Color;

import java.util.ArrayList;

/**
 * Created by OscarG on 10/02/15.
 */
public class EscenaJuego extends EscenaBase {

    private final int NUMERO_PERROS3 = 0;
    private final int NUMERO_PERROS2 = 0;
    private final int NUMERO_PERROS1 = 0;
    private final int NUMERO_CHILES = 30;
    private final int NUMERO_CLIENTES = 15;
    int vidas = 3;
    boolean moviendo;
    //Musica
    private AdministradorSonidos admSonidos = AdministradorSonidos.getInstance();
    private Sprite spriteFondo; //(el fondo de la escena, estático)
    private AnimatedSprite donGoyoIzq; //Sprite animado en la pantalla
    private AnimatedSprite donGoyoDer;
    private AnimatedSprite donGoyoAba;
    private AnimatedSprite donGoyoArr;
    private AnimatedSprite donGoyoQuietoDer;
    private AnimatedSprite donGoyoQuietoIzq;
    private AnimatedSprite donGoyoQuietoAba;
    private AnimatedSprite donGoyo;

    private Sprite canastaDer;
    private Sprite canastaIzq;
    private Sprite canastaUp;
    private Sprite canastaDown;
    private Sprite canasta;

    // Arreglo de perros3
    private ArrayList<Perro3> listaPerro3;
    // Arreglo de perros2
    private ArrayList<Perro2> listaPerro2;
    // Arreglo de perros1
    private ArrayList<Perro1> listaPerro1;
    // Arreglo de chiles
    private ArrayList<Sprite> listaChile;
    // El joystick virtual
    private AnalogOnScreenControl control;
    // ACUMULADOR de tiempo
    private float tiempoAcumulado3;
    // ACUMULADOR de tiempo
    private float tiempoAcumulado2;
    private float tiempoAcumulado1;
    private float tiempoAcumuladoChile;
    private float tiempoRetirada;
    private float tiempoAcumuladoJuego;
    //private boolean juegoTermina = false;
    private Scene escenaTermina;
    private AnalogOnScreenControl controlDos;
    private Sprite chileUno;
    //Pausa
    private boolean juegoEnPausa;
    private Scene escenaPausa;
    private Sprite pausa;
    private Sprite reanudar;
    private Sprite regresarPausaMenu;
    private Sprite pausarJuego;
    //Arreglo Clientes
    private ArrayList<Cliente> listaClientes;

    private Text txtMarcador;
    private Text txtPerdiste;
    private String tipoLetra = "Texto/GreatLakesShadowNF.ttf";

    private EstadoJuego hud;
    private boolean juegoTermina = false;
    SpriteBackground fondoPausa;

    //Marcador
    private int score = 0;

    @Override
    public void crearEscena() {
        // Creamos el sprite de manera óptima
        spriteFondo = new Sprite(0, 0, admRecursos.regionFondoJuego, admRecursos.vbom) {
            @Override
            protected void preDraw(GLState pGLState, Camera pCamera) {
                super.preDraw(pGLState, pCamera);
                pGLState.enableDither();
            }
        };
        // Configuración de la imagen
        spriteFondo.setPosition(ControlJuego.ANCHO_CAMARA / 2, ControlJuego.ALTO_CAMARA / 2);
        // spriteFondo.setScale(2.0f);
        // Crea el fondo de la pantalla
        // SpriteBackground fondo = new SpriteBackground(1,0.5f,0,spriteFondo);
        // setBackground(fondo);
        // setBackgroundEnabled(true);
        attachChild(spriteFondo);

        agregarDonGoyo();
        admRecursos.camara.setChaseEntity(donGoyo);

        agregarCanasta();
        agregarJoystick();
        agregarSegundoJoystick();
        //agregarchileUno();
        //agregarPerro3();
        agregarMuchosPerros();
        agregarJoystick();
        agregarSegundoJoystick();
        agregarMuchosPerros();
        // crearEscenaPausa();
        agregarMuchosClientes();
        cargarElementosPausa();
        cargarElementosPausa();
        agregarEstado();
        listaChile = new ArrayList<>(NUMERO_CHILES);

    }


    private void agregarMuchosPerros() {
        listaPerro3 = new ArrayList<>(NUMERO_PERROS3);
        for (int i = 0; i < NUMERO_PERROS3; i++) {
            Perro3 nuevoPerro3 = new Perro3(donGoyo,admRecursos);
            attachChild(nuevoPerro3.getPerro3()); // AGREGA a la ESCENA
            admSonidos.mbark3.play();
            listaPerro3.add(nuevoPerro3);    // Guarda en la listaPerro3
            //Perro3.perseguirDonGoyo(listaPerro3.get(i));
        }

        listaPerro2 = new ArrayList<>(NUMERO_PERROS2);

        for (int i = 0; i < NUMERO_PERROS2; i++) {
            Perro2 nuevoPerro2 = new Perro2(donGoyo, admRecursos);
            //Perro2 nuevoPerroV2 = new Perro2(donGoyo, admRecursos);
            attachChild(nuevoPerro2.getPerro2()); // AGREGA a la ESCENA
            admSonidos.mbark2.play();
            //attachChild(nuevoPerroV2.getPerroV2());
            listaPerro2.add(nuevoPerro2);
            //listaPerro2.add(nuevoPerroV2);

        }

        listaPerro1 = new ArrayList<>(NUMERO_PERROS1);
        for (int i = 0; i < NUMERO_PERROS1; i++) {
            Perro1 nuevoPerro1 = new Perro1(donGoyo, admRecursos);
            attachChild(nuevoPerro1.getPerro1()); // AGREGA a la ESCENA
            admSonidos.mbark1.play();
            listaPerro1.add(nuevoPerro1);
        }

    }

    private void agregarDonGoyo() {
        TiledTextureRegion regionDonGoyoIzq = admRecursos.regionDonGoyoIzq;
        donGoyoIzq = new AnimatedSprite(ControlJuego.ANCHO_CAMARA / 2, ControlJuego.ALTO_CAMARA / 2,
                regionDonGoyoIzq, admRecursos.vbom);
        // DonGoyo.setPosition(ControlJuego.ANCHO_CAMARA/2, ControlJuego.ALTO_CAMARA/2);
        // Arreglo de tiempos para los frames
        donGoyoIzq.animate(80);

        TiledTextureRegion regionDonGoyoDer = admRecursos.regionDonGoyoDer;
        donGoyoDer = new AnimatedSprite(ControlJuego.ANCHO_CAMARA / 2, ControlJuego.ALTO_CAMARA / 2,
                regionDonGoyoDer, admRecursos.vbom);
        donGoyoDer.animate(80);

        TiledTextureRegion regionDonGoyoAba = admRecursos.regionDonGoyoAba;
        donGoyoAba = new AnimatedSprite(ControlJuego.ANCHO_CAMARA / 2, ControlJuego.ALTO_CAMARA / 2,
                regionDonGoyoAba, admRecursos.vbom);
        donGoyoAba.animate(80);

        TiledTextureRegion regionDonGoyoArr = admRecursos.regionDonGoyoArr;
        donGoyoArr = new AnimatedSprite(ControlJuego.ANCHO_CAMARA / 2, ControlJuego.ALTO_CAMARA / 2,
                regionDonGoyoArr, admRecursos.vbom);
        donGoyoArr.animate(80);

        TiledTextureRegion regionDonGoyoQuietoDer = admRecursos.regionDonGoyoQuietoDer;
        donGoyoQuietoDer = new AnimatedSprite(ControlJuego.ANCHO_CAMARA / 2, ControlJuego.ALTO_CAMARA / 2,
                regionDonGoyoQuietoDer, admRecursos.vbom);
        donGoyoQuietoDer.animate(400);

        TiledTextureRegion regionDonGoyoQuietoIzq = admRecursos.regionDonGoyoQuietoIzq;
        donGoyoQuietoIzq = new AnimatedSprite(ControlJuego.ANCHO_CAMARA / 2, ControlJuego.ALTO_CAMARA / 2,
                regionDonGoyoQuietoIzq, admRecursos.vbom);
        donGoyoQuietoIzq.animate(400);

        TiledTextureRegion regionDonGoyoQuietoAba = admRecursos.regionDonGoyoQuietoAba;
        donGoyoQuietoAba = new AnimatedSprite(ControlJuego.ANCHO_CAMARA / 2, ControlJuego.ALTO_CAMARA / 2,
                regionDonGoyoQuietoAba, admRecursos.vbom);
        donGoyoQuietoAba.animate(400);

        donGoyo = donGoyoQuietoDer;
        attachChild(donGoyo);

        //ITextureRegion regionChileUno = admRecursos.regionCanastaDer;
        //canastaDer = new Sprite(donGoyo.getX(),donGoyo.getY(),regionCanastaDer,admRecursos.vbom);

    }

    private void agregarCanasta(){
        ITextureRegion regionCanastaDer = admRecursos.regionCanastaDer;
        canastaDer = new Sprite(donGoyo.getX()+20,donGoyo.getY()-20,regionCanastaDer,admRecursos.vbom);

        ITextureRegion regionCanastaIzq = admRecursos.regionCanastaIzq;
        canastaIzq = new Sprite(donGoyo.getX()-20,donGoyo.getY()-20,regionCanastaIzq,admRecursos.vbom);

        ITextureRegion regionCanastaUp = admRecursos.regionCanastaUp;
        canastaUp = new Sprite(donGoyo.getX()-20,donGoyo.getY()-20,regionCanastaUp,admRecursos.vbom);

        ITextureRegion regionCanastaDown = admRecursos.regionCanastaDown;
        canastaDown = new Sprite(donGoyo.getX()+20,donGoyo.getY()-20,regionCanastaDown,admRecursos.vbom);

        canasta = canastaDer;
        attachChild(canasta);
    }

    // Parte de disparo de chiles

    private void agregarchileUno(){
            ITextureRegion regionChileUno = admRecursos.regionChileArma1;
            chileUno = new Sprite(donGoyo.getX(),donGoyo.getY(),regionChileUno,admRecursos.vbom);
            //listaChile.add(chileUno);


        //chileUno.detachSelf();
    }

    private void disparar(final float pX, final float pY){
        admSonidos.mthrow.play();
        //agregarchileUno();
        /*if (moviendo) {
            agregarchileUno();
            return;
        }*/
        int X = (int)(pX-donGoyo.getX());
        int Y = (int)(pY-donGoyo.getY());
        if (X <= 0 )
            ; //return;
        if (Y >= 0)
            ; //return;
        //if (!chileUno.hasParent()) {

        //}

        // crear chile y agregarlo a la lista y agregarlo a la escena


        for (int j = 0; j <= NUMERO_CHILES; j++) {
            //agregarchileUno();
            ITextureRegion regionChileUno = admRecursos.regionChileArma1;
            chileUno = new Sprite(donGoyo.getX(),donGoyo.getY(),regionChileUno,admRecursos.vbom);
            listaChile.add(j, chileUno);
//???            attachChild(listaChile.get(j));
            /*if (!chileUno.hasParent()) {
                attachChild(listaChile.get(j));
            }*/
            listaChile.get(j).setPosition(donGoyo);



            MoveModifier mod = new MoveModifier(1,donGoyo.getX(),donGoyo.getY(),donGoyo.getX()+500*pX,donGoyo.getY()+500*pY){ //tiempo que tarda, x inicial, y inicial, x inal y y final
                @Override
                protected void onModifierFinished(IEntity pItem) {
                    super.onModifierFinished(pItem);
                    moviendo=false;
                }
            };
            listaChile.get(j).registerEntityModifier(mod);
            moviendo=true;
        }
        attachChild(chileUno);


    }

    private void terminar() {
        setChildScene(escenaTermina, false, true, true);
    }

    @Override
    protected void onManagedUpdate(float pSecondsElapsed) {
        boolean statusPerro = false;
        super.onManagedUpdate(pSecondsElapsed);
        if (juegoEnPausa){
            setIgnoreUpdate(true);
        }
        canasta.setPosition(donGoyo.getX()+5,donGoyo.getY()-7);
        pausarJuego.setPosition(donGoyo.getX() - 330, donGoyo.getY() + 195);


        for (int i = listaPerro3.size() - 1; i>=0; i--) {
            listaPerro3.get(i).perseguirDonGoyo(this, donGoyo);
            if (listaPerro3.get(i).atrapaDonGoyo(listaPerro3, donGoyo, statusPerro)) {
                admSonidos.morale.play();
                hud.disminuirVidas(1);
                if (hud.getVidas() == 0){
                    juegoTermina = true;
                }
                tiempoRetirada+=pSecondsElapsed;

                if (tiempoRetirada>8){
                    listaPerro3.get(i).getPerro3().detachSelf();
                    tiempoRetirada = 0;
                }
            }

            if (listaChile.size()>0) {
                for (int j = listaChile.size() - 1; j >= 0; j--) {
                    if ((listaChile.get(j)).collidesWith(listaPerro3.get(i).getPerro3())) {
                        admSonidos.mcry3.play();
                        listaChile.get(j).detachSelf();
                        listaPerro3.get(i).getPerro3().detachSelf();
                        listaPerro3.remove(i);
                        listaChile.remove(j);
                        listaChile.add(chileUno);
                        break;
                    }
                }
            }

        }

        for (int i = listaPerro2.size() - 1; i>=0; i--) {
            listaPerro2.get(i).perseguirDonGoyo2(this, listaPerro2, donGoyo);
            if (listaPerro2.get(i).atrapaDonGoyo(listaPerro2, donGoyo)){
                admSonidos.morale.play();
                hud.disminuirVidas(1);
                if (hud.getVidas() == 0){
                    juegoTermina = true;
                }
                tiempoRetirada+=pSecondsElapsed;

                if (tiempoRetirada>8){
                    listaPerro2.get(i).getPerro2().detachSelf();
                    tiempoRetirada = 0;
                }
            }
            if (listaChile.size()>0) {
                for (int j = listaChile.size() - 1; j >= 0; j--) {
                    tiempoAcumuladoChile+=pSecondsElapsed;
                    if ((listaChile.get(j)).collidesWith(listaPerro2.get(i).getPerro2())) {
                        admSonidos.mcry2.play();
                        listaChile.get(j).detachSelf();
                        listaPerro2.get(i).getPerro2().detachSelf();
                        listaPerro2.remove(i);
                        listaChile.remove(j);
                        listaChile.add(chileUno);
                        break;
                    }

                }
            }

        }

        for (int i = listaPerro1.size() - 1; i>=0; i--) {
            listaPerro1.get(i).perseguirDonGoyo3(this, listaPerro1, donGoyo);
            if (listaPerro1.get(i).atrapaDonGoyo(listaPerro1, donGoyo)) {
                admSonidos.morale.play();
                hud.disminuirVidas(1);
                if (hud.getVidas() == 0){
                    juegoTermina = true;
                }
                tiempoRetirada+=pSecondsElapsed;

                if (tiempoRetirada>8){
                    listaPerro1.get(i).getPerro1().detachSelf();
                    tiempoRetirada = 0;
                }
            }
            if (listaChile.size()>0) {
                for (int j = listaChile.size() - 1; j >= 0; j--) {
                    tiempoAcumuladoChile+=pSecondsElapsed;
                    if ((listaChile.get(j)).collidesWith(listaPerro1.get(i).getPerro1())) {
                        admSonidos.mcry1.play();
                        listaChile.get(j).detachSelf();
                        listaPerro1.get(i).getPerro1().detachSelf();
                        listaPerro1.remove(i);
                        listaChile.remove(j);
                        listaChile.add(chileUno);
                        break;
                    }
                }
            }
        }
        if (hud.getVidas() == 0){
            juegoTermina = true;
        }
        if (juegoTermina) {
            crearEscenaTermina();
            //regresarAMenu();
            terminar();
            setIgnoreUpdate(true);
            return;
        }
        tiempoAcumuladoJuego += pSecondsElapsed;
        if (tiempoAcumuladoJuego > 8) {
            tiempoAcumulado3 += pSecondsElapsed;
            if (tiempoAcumulado3 > 2) {
                if (listaPerro3.size() < 15) {
                    Perro3 nuevoPerro3 = new Perro3(donGoyo, admRecursos);
                    attachChild(nuevoPerro3.getPerro3()); // AGREGA a la ESCENA
                    listaPerro3.add(nuevoPerro3);
                    tiempoAcumulado3 = 0;
                }
                tiempoAcumulado3 = 0;

            }

            tiempoAcumulado2 += pSecondsElapsed;
            if (tiempoAcumulado2 > 3) {
                if (listaPerro2.size() < 13) {
                    Perro2 nuevoPerro2 = new Perro2(donGoyo, admRecursos);
                    attachChild(nuevoPerro2.getPerro2()); // AGREGA a la ESCENA
                    listaPerro2.add(nuevoPerro2);
                    tiempoAcumulado2 = 0;
                }
                tiempoAcumulado2 = 0;
            }

            tiempoAcumulado1 += pSecondsElapsed;
            if (tiempoAcumulado1 > 6) {
                if (listaPerro1.size() < 10) {
                    Perro1 nuevoPerro = new Perro1(donGoyo, admRecursos);
                    attachChild(nuevoPerro.getPerro1()); // AGREGA a la ESCENA
                    listaPerro1.add(nuevoPerro);
                    tiempoAcumulado1 = 0;
                }
                tiempoAcumulado1 = 0;
            }
        }


        //Clientes
        for (int i = 0; i < listaClientes.size();i++) {
            if (listaClientes.get(i).getCliente().collidesWith(donGoyo)) {
                admSonidos.msold.play();
                listaClientes.get(i).getCliente().detachSelf();
                listaClientes.remove(i);
                animacionTexto();
                score += 10;
            }
        }

    }

    // El joystick virtual para mover a Don Goyo
    private void agregarJoystick() {
        control = new AnalogOnScreenControl(64, 64, admRecursos.camara,
                admRecursos.regionFondoControl, admRecursos.regionBotonControl,
                0.03f, 100, admRecursos.vbom, new AnalogOnScreenControl.IAnalogOnScreenControlListener() {
            @Override
            public void onControlClick(AnalogOnScreenControl pAnalogOnScreenControl) {

            }

            @Override
            public void onControlChange(BaseOnScreenControl pBaseOnScreenControl, float pValueX, float pValueY) {

                float x = donGoyo.getX() + 10 * pValueX;
                if (x > 2000 || x < -1180) {
                    x = donGoyo.getX();
                }
                //x > 3400 || x < 400
                float y = donGoyo.getY() + 10 * pValueY;
                if (y > 1140 || y < -625) {
                    y = donGoyo.getY();
                }
                donGoyo.setPosition(x, y);

                if (pValueX > 0 && pValueY > 0 && pValueY < pValueX && donGoyo != donGoyoDer) {
                    if (canasta != canastaDer) {
                        canastaDer.setPosition(donGoyo.getX()+200, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaDer;
                        attachChild(canasta);
                    }
                    donGoyoDer.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoDer;
                    attachChild(donGoyo);


                }
                if (pValueX > 0 && pValueY < 0 && pValueY > (-pValueX) && donGoyo != donGoyoDer) {
                    if (canasta != canastaDer) {
                        canastaDer.setPosition(donGoyo.getX()+20, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaDer;
                        attachChild(canasta);
                    }
                    donGoyoDer.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoDer;
                    attachChild(donGoyo);
                    //attachChild(canasta);


                }
                if (pValueX < 0 && pValueY > 0 && pValueY > (-pValueX) && donGoyo != donGoyoArr) {
                    if (canasta != canastaUp) {
                        canastaUp.setPosition(donGoyo.getX()-20, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaUp;
                        attachChild(canasta);
                    }
                    donGoyoArr.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoArr;
                    attachChild(donGoyo);
                    //attachChild(canastaUp);

                }
                if (pValueX > 0 && pValueY > 0 && pValueY > pValueX && donGoyo != donGoyoArr) {
                    if (canasta != canastaUp) {
                        canastaUp.setPosition(donGoyo.getX()-20, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaUp;
                        attachChild(canasta);
                    }

                    donGoyoArr.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoArr;
                    attachChild(donGoyo);
                    //attachChild(canastaUp);


                }
                if (pValueY > 0 && pValueX < 0 && pValueY < (-pValueX) && donGoyo != donGoyoIzq) {
                    donGoyoIzq.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoIzq;
                    attachChild(donGoyo);
                    //attachChild(canastaIzq);

                    if (canasta != canastaIzq) {
                        canastaIzq.setPosition(donGoyo.getX()-200, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaIzq;
                        attachChild(canasta);
                    }
                }
                if (pValueY < 0 && pValueX < 0 && pValueY > pValueX && donGoyo != donGoyoIzq) {
                    donGoyoIzq.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoIzq;
                    attachChild(donGoyo);
                    //attachChild(canastaIzq);

                    if (canasta != canastaIzq) {
                        canastaIzq.setPosition(donGoyo.getX()-20, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaIzq;
                        attachChild(canasta);
                    }
                }
                if (pValueY < 0 && pValueX < 0 && pValueY < pValueX && donGoyo != donGoyoAba) {
                    donGoyoAba.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoAba;
                    attachChild(donGoyo);
                    //attachChild(canastaDown);

                    if (canasta != canastaDown) {
                        canastaDown.setPosition(donGoyo.getX()+200, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaDown;
                        attachChild(canasta);
                    }
                }
                if (pValueX > 0 && pValueY < 0 && pValueY < (-pValueX) && donGoyo != donGoyoAba) {
                    donGoyoAba.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoAba;
                    attachChild(donGoyo);
                    //attachChild(canastaDown);

                    if (canasta != canastaDown) {
                        canastaDown.setPosition(donGoyo.getX()+20, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaDown;
                        attachChild(canasta);
                    }
                }
                if (pValueX == 0 && pValueY == 0 && (donGoyo == donGoyoDer || donGoyo == donGoyoArr) && donGoyo != donGoyoQuietoDer){
                    donGoyoQuietoDer.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoQuietoDer;
                    attachChild(donGoyo);
                    //attachChild(canastaDer);

                    if (canasta != canastaDer) {
                        canastaDer.setPosition(donGoyo.getX()+20, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaDer;
                        attachChild(canasta);
                    }
                }
                if (pValueX == 0 && pValueY == 0 && donGoyo == donGoyoIzq && donGoyo != donGoyoQuietoIzq){
                    donGoyoQuietoIzq.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoQuietoIzq;
                    attachChild(donGoyo);
                    //attachChild(canastaIzq);

                    if (canasta != canastaIzq) {
                        canastaIzq.setPosition(donGoyo.getX()-20, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaIzq;
                        attachChild(canasta);
                    }
                }
                if (pValueX == 0 && pValueY == 0 && donGoyo == donGoyoAba && donGoyo != donGoyoQuietoAba){
                    donGoyoQuietoAba.setPosition(donGoyo);
                    donGoyo.detachSelf();
                    donGoyo = donGoyoQuietoAba;
                    attachChild(donGoyo);
                    //attachChild(canastaDown);

                    if (canasta != canastaDown) {
                        canastaDown.setPosition(donGoyo.getX()+10, donGoyo.getY()-20);
                        canasta.detachSelf();
                        canasta = canastaDown;
                        attachChild(canasta);
                    }
                }
                admRecursos.camara.setChaseEntity(donGoyo);
            }
        });
        final Sprite botonControl = control.getControlKnob();
        //botonControl.setScale(1.7f);
        EscenaJuego.this.setChildScene(control);
    }

    private void agregarSegundoJoystick(){
        controlDos = new AnalogOnScreenControl(ControlJuego.ANCHO_CAMARA-64, 64, admRecursos.camara,
                admRecursos.regionFondoControlDos, admRecursos.regionBotonControlDos,
                1.32f,100,admRecursos.vbom,new AnalogOnScreenControl.IAnalogOnScreenControlListener() {
            @Override
            public void onControlClick(AnalogOnScreenControl pAnalogOnScreenControl) {
                // Implementacion para el cambio de chiles
            }

            @Override
            public void onControlChange(final BaseOnScreenControl pBaseOnScreenControl, final float pValueX, final float pValueY) {
                float x = donGoyo.getX() + 10 * pValueX;
                float y = donGoyo.getY() + 10 * pValueY;


                double radio = Math.atan2(x, y);
                //tiempoAcumuladoChile = 3;
                //if (tiempoAcumuladoChile > 2) {
                    if (pValueX != 0 || pValueY != 0) {
                        //attachChild(chileUno);
                        disparar(pValueX, pValueY);
                        tiempoAcumuladoChile = 0;
                    }
                //}
                //agregarchileUno();
                //disparar(pValueX, pValueY);

            }
        });
        final Sprite botonControl2 = controlDos.getControlKnob();
        //botonControl2.setScale(1.7f);
        control.setChildScene(controlDos);
    }

    //Parte rodrigo

    private void crearEscenaTermina(){
        // Crea la escena que se mostrará
        escenaTermina = new Scene();
        // No muestra fondo
        escenaTermina.setBackgroundEnabled(false);
        // Un recuadro como fondo para mostrar los letreros
        Rectangle cuadro = new Rectangle(donGoyo.getX(),donGoyo.getY(),

                ControlJuego.ANCHO_CAMARA,ControlJuego.ALTO_CAMARA,admRecursos.vbom) {
            @Override
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
                // El usuario hizo touch, regresar al menú principal
                if (pSceneTouchEvent.isActionDown()) {
                    regresarAMenu();

                    return true;
                }
                return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
            }
        };
        cuadro.setColor(Color.WHITE);
        escenaTermina.attachChild(cuadro);
        escenaTermina.registerTouchArea(cuadro);
        IFont tipo = crearTipoLetraFinal(tipoLetra);
        txtMarcador = new Text(cuadro.getX(),cuadro.getY(),tipo,"Sales of the day: " + "$ "+ score,30,admRecursos.engine.getVertexBufferObjectManager());
        txtPerdiste = new Text(cuadro.getX(),cuadro.getY()+50,tipo,"You lose, touch to exit",30,admRecursos.engine.getVertexBufferObjectManager());
        txtMarcador.setColor(Color.BLACK);
        txtPerdiste.setColor(Color.BLACK);
        escenaTermina.attachChild(txtMarcador);
        escenaTermina.attachChild(txtPerdiste);
        admRecursos.camara.setHUD(null);
    }


    private void agregarMuchosClientes(){
        listaClientes = new ArrayList<>(NUMERO_CLIENTES);
        for (int i = 0; i <= NUMERO_CLIENTES; i++) {
            Cliente nuevoCliente1 = new Cliente(donGoyo,admRecursos);
            attachChild(nuevoCliente1.getCliente());
            listaClientes.add(nuevoCliente1);
        }


    }
    private void animacionTexto(){

        IFont tipo = crearTipoLetra("Texto/GreatLakesShadowNF.ttf");
        final Text txtPuntos = new Text(donGoyo.getX(),donGoyo.getY(),tipo,"+$10",12,admRecursos.engine.getVertexBufferObjectManager());
        txtPuntos.setColor(0,0,0);
        attachChild(txtPuntos);

        MoveYModifier modY = new MoveYModifier(1, txtPuntos.getY(),txtPuntos.getY()+60){
            @Override
            protected void onModifierStarted(IEntity pItem)
            {
                super.onModifierStarted(pItem);

            }
            @Override
            protected void onModifierFinished(IEntity pItem)
            {
                super.onModifierFinished(pItem);
                txtPuntos.setText("");
            }
        };
        txtPuntos.registerEntityModifier(modY);

    }




    private Font crearTipoLetra(String archivoTipo){
        // La imagen que contiene cada símbolo
        final ITexture fontTexture = new BitmapTextureAtlas(admRecursos.engine.getTextureManager(),1024,1024);

        // Carga el archivo, tamaño 36, antialias y color
        Font tipoLetra = FontFactory.createFromAsset(admRecursos.engine.getFontManager(),
                fontTexture, admRecursos.actividadJuego.getAssets(), archivoTipo, 20, true, 0xFF00FF00);
        tipoLetra.load();
        tipoLetra.prepareLetters("Regrsa lmnupidPd,ck".toCharArray());

        return tipoLetra;
    }

    private Font crearTipoLetraFinal(String archivoTipo){
        // La imagen que contiene cada símbolo
        final ITexture fontTexture = new BitmapTextureAtlas(admRecursos.engine.getTextureManager(),1024,1024);

        // Carga el archivo, tamaño 36, antialias y color
        Font tipoLetra = FontFactory.createFromAsset(admRecursos.engine.getFontManager(),
                fontTexture, admRecursos.actividadJuego.getAssets(), archivoTipo, 40, true, 0xFF00FF00);
        tipoLetra.load();
        tipoLetra.prepareLetters("Regrsa lmnupidPd,ck".toCharArray());

        return tipoLetra;
    }

    private void agregarEstado(){
        hud = new EstadoJuego(admRecursos.engine,admRecursos.actividadJuego,admRecursos);
        admRecursos.camara.setHUD(hud);
    }

    private void cargarFondoPausa(){
        ITextureRegion regionPausa = admRecursos.regionPausa;
        pausa = new Sprite(donGoyo.getX(),donGoyo.getY(),regionPausa,admRecursos.vbom);
        fondoPausa = new SpriteBackground(pausa);
        fondoPausa.setColorEnabled(false);
    }




    private void cargarElementosPausa(){
        ITextureRegion regionPausar = admRecursos.regionPausar;
        pausarJuego = new Sprite (5000,5000,regionPausar,admRecursos.vbom) {
            @Override
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
                // El usuario hizo touch, REANUDAR el juego
                if (pSceneTouchEvent.isActionDown()) {
                    crearEscenaPausa();
                    cargarFondoPausa();
                    pausar();
                }
                return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
            }
        };
        attachChild(pausarJuego);
        this.registerTouchArea(pausarJuego);
    }

    private void regresarNivel(){
        juegoEnPausa = false;
        setIgnoreUpdate(false);
        clearChildScene();
    }

    private void pausar(){
        juegoEnPausa = true;
        setChildScene(escenaPausa, false, true, true);
    }



    //Pausa
    private void crearEscenaPausa(){
        escenaPausa = new Scene();

        Rectangle cuadro = new Rectangle(donGoyo.getX(),donGoyo.getY(),ControlJuego.ANCHO_CAMARA,ControlJuego.ALTO_CAMARA,admRecursos.vbom);
        cuadro.setColor(Color.WHITE);
        escenaPausa.attachChild(cuadro);

        ITextureRegion regionRegresarMenu = admRecursos.regionBtnPausaMenu;
        regresarPausaMenu = new Sprite(donGoyo.getX(),donGoyo.getY(),regionRegresarMenu,admRecursos.vbom){
            @Override
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
                // El usuario hizo touch, REANUDAR el juego
                if (pSceneTouchEvent.isActionUp()) {
                    regresarAMenu();
                    admRecursos.camara.setHUD(null);
                }
                return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
            }
        };

        escenaPausa.registerTouchArea(regresarPausaMenu);
        escenaPausa.attachChild(regresarPausaMenu);

        ITextureRegion regionReanudar = admRecursos.regionBtnPausaReanudar;
        reanudar = new Sprite(donGoyo.getX(),donGoyo.getY()+100,regionReanudar,admRecursos.vbom){
            @Override
            public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY) {
                // El usuario hizo touch, REANUDAR el juego
                if (pSceneTouchEvent.isActionDown()) {
                    regresarNivel();
                    agregarJoystick();
                    agregarSegundoJoystick();
                }
                return super.onAreaTouched(pSceneTouchEvent, pTouchAreaLocalX, pTouchAreaLocalY);
            }
        };
        escenaPausa.registerTouchArea(reanudar);
        escenaPausa.attachChild(reanudar);
    }


    //Fin parte rodrigo

    @Override
    public void onBackKeyPressed() {
        // Regresar al MENU principal
        admSonidos.btnreg.play();
        regresarAMenu();
        admRecursos.camara.setHUD(null);
    }

    private void regresarAMenu() {
        // Regresar al menú principal
        admSonidos.cargarMusicaPantallas();
        admSonidos.pararMusica();
        admSonidos.setMusicaBase(TipoMusica.MUSICA_PANTALLAS);
        admSonidos.liberarMusicaJuego();
        admSonidos.liberarSonidosJuego();
        admEscenas.crearEscenaMENU();
        admEscenas.setEscena(TipoEscena.ESCENA_MENU);
        admEscenas.liberarEscenaJuego();
    }

    @Override
    public TipoEscena getTipoEscena() {
        return TipoEscena.ESCENA_JUEGO;
    }

    @Override
    public void liberarEscena() {
        /*
        // Liberar cada recurso usado en esta escena
        spriteFondo.detachSelf();   // Se desconecta de la escena
        spriteFondo.dispose();      // Libera la memoria
        */

        this.detachSelf();      // La escena se deconecta del engine
        this.dispose();         // Libera la memoria
    }
}
